#pragma once

#include <string>
#include <utility>

// LogContextManager 类：用于管理线程局部的Trace ID 和 Span ID
class LogContextManager {
public:
    // 设置当前线程的Trace ID 和 Span ID
    static void set_context(const std::string& trace_id, const std::string& span_id);

    // 清除当前线程的上下文
    static void clear_context();

    // 获取当前线程的Trace ID
    static std::string get_trace_id();

    // 获取当前线程的Span ID
    static std::string get_span_id();

    // 辅助类：用于类似于RAII风格的上下文设置（进入函数/作用域时设置，退出时恢复）
    class ContextScope {
    public:
        ContextScope(const std::string& trace_id, const std::string& span_id);
        ~ContextScope();
    private:
        std::string m_prevTraceId;
        std::string m_prevSpanId;
    };


private:
    // 使用线程thread_local 存储线程局部变量
    static thread_local std::string s_traceId;
    static thread_local std::string s_spanId;

};
